关键字POI搜索 Sample详情

最后更新时间:2019年6月17日

POI查询的关键字搜索方式,即根据用户输入的关键字、选择的类型进行模糊查询,搜索满足条件的POI信息点,可以通过标注、绘制或者列表方式展示查询到的兴趣点。

在进行POI查询之前,需准备POI数据,详细步骤参考POI数据组织模块,在此不赘述,接下来讲解具体的关键字搜索的编码实现方法。

1

POI查询对象准备

首先,创建并初始化POI查询对象,设置POI数据。

//创建POI查询对象
PoiSearch poiSearch = new PoiSearch();
//为POI查询对象设置配置好的.db数据,并以此来初始化
poiSearch.initWithDBPath(Environment.getExternalStorageDirectory().getPath()+"/MapGIS Sample/POI/WuHanPOI.db");
//设置查询每页的结果数目
poiSearch.setPageSize(20);

2

设置查询条件

进行关键字POI搜索,需要在查询之前设置条件,首先构造查询条件对象PoiSearch.Query,然后利用其接口设置查询的关键字,还可以设置查询的POI类型。代码调用如下所示,在此给定查询关键字为“武汉”,查询类型为TouristAttraction(景点),将查询得到包含关键字为武汉的景点POI点。当然也可查询多种类型。

//构造POI查询条件对象,并设置给查询对象
PoiSearch.Query query = new PoiSearch.Query("武汉", PoiTypeDef.TouristAttraction);
poiSearch.setQuery(query);

代码说明:PoiSearch.Query的第一个参数为查询关键字的字符串;第二个参数为POI类型的组合,此为景点类型(TouristAttraction),也可定义组合(如餐馆 + 电影院 + 景点)。

SDK中提供的POI具体分类如下表所示,代码中由com.zondy.mapgis.core.poisearch.PoiTypeDef的字段提供,用户可以根据自己需要选择,在实际项目应用中,可以将这些类型以列表或其他形式展示给终端用户,从而让用户自行选择类型。

POI一级分类 POI二级分类 PoiTypeDef字段
所有POI类型 类型的全集 All
住宿服务 宾馆 Accommodation
汽车服务 加油站 AutoCarService
科教文化 学校 Education
餐饮服务 中餐厅 FoodBeverages
体育休闲服务 娱乐场所,网吧 InternetBar
医疗相关服务 综合医院 MedicalService
公共设施 公共厕所 PublicService
交通设施服务 停车场 PublicParkingLot
地铁站 PublicSubway
公交车站 PublicTransportation
购物中心 商场 Shopping
超市 SuperMarket
风景名胜 景点 TouristAttraction

3

查询与结果展示

查询POI,遍历查询结果,并以文本图形、标注形式展示,核心代码如下:

//查询并返回结果
PoiPagedResult searchPoiResult = poiSearch.searchPOI();
//判断是否查询到了结果
if (searchPoiResult != null && searchPoiResult.getTotalPOICount() > 0) {
    //遍历所有页
    for (int i = 1; i <= searchPoiResult.getPageCount(); i++) {
        List<PoiItem> poiItemList = searchPoiResult.getPage(i); //获取每一页的结果集,从1开始
        for (int j = 0; j < poiItemList.size(); j++) {//遍历每一页的结果项
            //获取POI项
            PoiItem poiItem = poiItemList.get(j);
            //获取POI点信息:坐标、名称、地址、电话
            Dot point = poiItem.getPoint();
            String name = poiItem.getName();
            String address = poiItem.getAddress();
            String phoneNum = poiItem.getTel();
        }
    }
    mapView.refresh();   //地图刷新
} else {
    Toast.makeText(this, "查询结果为空", Toast.LENGTH_SHORT).show();
}

查询到POI结果后,可以通过文本图形、地图标注进行展示:

//创建文本图形并绘制
GraphicText pointText = new GraphicText();
pointText.setPoint(point);  //坐标点
pointText.setText(name);    //文本
pointText.setFontSize(38);  //文字大小
pointText.setReferenceInfo(10, 15, 2, new PointF(15, 3));  //锚点
mapView.getGraphicsOverlay().addGraphic(pointText);

//根据POI坐标点的名称、地址、坐标以及位图创建标注并绘制
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.mipmap.location);
Annotation annotationPOI = new Annotation(name, address, point, bmp);
mapView.getAnnotationsOverlay().addAnnotation(annotationPOI);

展示效果如下图所示:

关键字POI搜索.jpg